home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ARexxTools / FWMacros1.lha / UserMacros / english / VerticalAlign.fw < prev    next >
Encoding:
Text File  |  1994-10-04  |  4.6 KB  |  167 lines

  1. /*
  2. $AUTHOR:  Fernando Nunes e Manuel Lemos (UpperDesign@zeus.ci.ua.pt)
  3. $VER: VerticalAlign 1.00 (2.10.94)
  4.       Description:  ARexx macro for FinalWriter to vertically align all
  5.                     selected graphics
  6. */
  7.  
  8. options results
  9.  
  10. GraphicTool
  11. SetMeasure
  12.  
  13. /* obter uma lista dos objectos seleccionados */
  14. selecionados = 0
  15. FirstObject SELECTED
  16. do until result = 0
  17.   selecionados = selecionados + 1
  18.   objectid.selecionados = result
  19.   NextObject objectid.selecionados SELECTED
  20. end
  21.  
  22. if selecionados > 1 then
  23. do
  24.  
  25.   call addlib("rexxreqtools.library", 0, -30, 0)
  26.  
  27.   NL = '0a'x
  28.  
  29.   ALINHAR_ACIMA     = 1
  30.   ALINHAR_AO_CENTRO = 2
  31.   ALINHAR_ABAIXO    = 3
  32.   AJUDA             = 4
  33.   CANCELAR          = 0
  34.  
  35.   do until alinhar ~= AJUDA
  36.       alinhar = rtezrequest( "Vertical alignment of graphic objects",,
  37.                              "_Top|_Center|_Bottom|_Help|Cancel",,
  38.                              "" )
  39.  
  40.       if alinhar = AJUDA then
  41.       call rtezrequest( "Vertical alignment of graphic objects" || NL || NL||,
  42.                         "Top - aligns the selected objects by the" || NL ||,
  43.                         "top coordinate of the topmost object." || NL || NL,
  44.                         "Center - centers the selected objects" || NL ||,
  45.                         "in the middle of the topmost and" || NL ||,
  46.                         "bottommost objects." || NL || NL,
  47.                         "Bottom - aligns the selected objects by" || NL ||,
  48.                         "bottom coordinate of the bottommost object.",,
  49.                         "I see",,
  50.                         "Help")
  51.   end
  52.   if alinhar = CANCELAR then
  53.     return
  54.  
  55.   OBJECTO_LINHA = 2
  56.  
  57.   /* determinar a coordenada dos objectos mais acima e mais abaixo */
  58.   do objecto = 1 to selecionados
  59.     GetObjectCoords objectid.objecto
  60.     coords = RESULT
  61.     PARSE VAR coords pagina esquerda cima direita baixo
  62.     GetObjectType objectid.objecto
  63.     tipo = result
  64.  
  65.     /* linhas */
  66.     if tipo = OBJECTO_LINHA then
  67.       do
  68.         if cima > baixo then
  69.           do
  70.             troca = cima
  71.             cima = baixo
  72.             baixo = troca
  73.           end
  74.       end
  75.     else
  76.       baixo = cima + baixo
  77.     if objecto = 1 | cima < mais_acima then
  78.       mais_acima = cima
  79.     if objecto = 1 | baixo > mais_abaixo then
  80.       mais_abaixo = baixo
  81.   end
  82.  
  83.   if alinhar = ALINHAR_ACIMA then
  84.     /* mover os objectos para cima */
  85.     do objecto = 1 to selecionados
  86.       GetObjectCoords objectid.objecto
  87.       coords = RESULT
  88.       PARSE VAR coords pagina esquerda cima direita baixo
  89.       GetObjectType objectid.objecto
  90.       tipo = result
  91.  
  92.       /* linhas */
  93.       if tipo = OBJECTO_LINHA then
  94.           do
  95.             if cima < baixo then
  96.               do
  97.                 baixo = mais_acima + baixo - cima
  98.                 cima = mais_acima
  99.               end
  100.             else
  101.               do
  102.                 cima =  mais_acima + cima - baixo
  103.                 baixo = mais_acima
  104.               end
  105.           end
  106.        else
  107.         cima = mais_acima
  108.       SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
  109.     end
  110.   if alinhar = ALINHAR_AO_CENTRO then
  111.     do
  112.       /* centrar os objectos */
  113.       centro = ( mais_abaixo + mais_acima ) / 2
  114.       do objecto = 1 to selecionados
  115.         GetObjectCoords objectid.objecto
  116.         coords = RESULT
  117.         PARSE VAR coords pagina esquerda cima direita baixo
  118.         GetObjectType objectid.objecto
  119.         tipo = result
  120.  
  121.         /* linhas */
  122.         if tipo = OBJECTO_LINHA then
  123.           do
  124.             meia_altura = ( baixo - cima ) / 2
  125.             baixo = centro + meia_altura
  126.           end
  127.         else
  128.           meia_altura = baixo / 2
  129.         cima = centro - meia_altura
  130.         SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
  131.       end
  132.     end
  133.   if alinhar = ALINHAR_ABAIXO then
  134.     /* mover os objectos para a baixo */
  135.     do objecto = 1 to selecionados
  136.       GetObjectCoords objectid.objecto
  137.       coords = RESULT
  138.       PARSE VAR coords pagina esquerda cima direita baixo
  139.       GetObjectType objectid.objecto
  140.       tipo = result
  141.  
  142.       /* linhas */
  143.       if tipo = OBJECTO_LINHA then
  144.         do
  145.           if cima < baixo then
  146.             do
  147.               cima = mais_abaixo - baixo + cima
  148.               baixo = mais_abaixo
  149.             end
  150.           else
  151.             do
  152.               baixo = mais_abaixo - cima + baixo
  153.               cima = mais_abaixo
  154.             end
  155.         end
  156.       else
  157.         cima = mais_abaixo - baixo
  158.       SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
  159.     end
  160.  
  161.   /* voltar a selecionar todos os objectos selecionados antes */
  162.   do objecto = 1 to selecionados
  163.     SelectObject objectid.objecto MULTIPLE
  164.   end
  165.   redraw
  166. end
  167.